package javaCode.chapter07.Super_;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

public class B extends A{

    public int n1 = 888;

    //编写测试方法
    public void test(){
        //super的访问不限于直接父类，如果爷爷类和本类有同名的成员，也可以使用super去访问爷爷类的成员；
        // 如果多个基类(上级类 )中都有同名的成员，使用super访问遵循就近原则。A->B->C
        System.out.println("super.n1=" + super.n1);
    }

    //访问父类的属性，但不能访问父类的private属性
    public void hi(){
        System.out.println(super.n1 + " " + super.n2 + " " + super.n3);
    }

    public void sum(){
        System.out.println("B类的 sum方法()...");
        //希望调用父类-A 的cal方法
        //这时，因为子类B没有cal方法，因此我们可以使用下面三种方式

        //找到cal方法时(cal() 和 this.cal())，顺序是
        // 先找本类，如果有，则调用
        // 如果没有，则找父类(如国有，并可以调用，则调用）
        // 如果父类没有，则继续找父类的父类，整个规则，就是一样的，直到 Object类
        // 提示：如果查找方法的过程中，找到了，但是不能访问，则报错
        //cal();
        //this.cal(); //等价 cal

        //找cal(super.cal())方法的顺序是直接查找父类，其他的规则一样
        super.cal();
    }
    public void cal(){
        System.out.println("B类的cal() 方法...");
    }

    //访问父类的方法，不能访问父类的private方法
    public void ok(){
        super.test100();
        super.test200();
        super.test300();
    }

    //访问父类的构造器：super(参数列表);只能放在构造器的第一句，只能出现一句！
    public B() {
    }
}
